package com.tsd.core.utils;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.*;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * @author zsy
 */
public class WaterMarkPdfUtils {

    public static void main(String[] args) throws IOException, DocumentException {
        // 要输出的pdf文件
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("C:/Users/admin/Desktop/target.pdf")));
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        // 将pdf文件先加水印然后输出
        setWatermark(bos, "C:/Users/admin/Desktop/t1.pdf", format.format(cal.getTime()) + "  下载使用人：" + "测试user", 16);
    }

    /**
     * @param bos           输出文件的位置
     * @param filePath      原PDF位置
     * @param waterMarkName 页脚添加水印
     * @param permission    权限码
     * @throws DocumentException
     * @throws IOException
     */
    public static void setWatermark(BufferedOutputStream bos, String filePath, String waterMarkName, int permission)
            throws IOException, DocumentException {
        PdfReader reader = new PdfReader(filePath);
        PdfStamper stamper = new PdfStamper(reader, bos);
        int total = reader.getNumberOfPages() + 1;
        PdfContentByte waterMar;

        PdfGState gs = new PdfGState();
        long startTime = System.currentTimeMillis();
        System.out.println("PDF加图片水印>> start");
        for (int i = 1; i < total; i++) {
            //content = stamper.getOverContent(i);// 在内容上方加水印
            waterMar = stamper.getUnderContent(1);//在内容下方加水印
            // 设置图片透明度为0.2f
            gs.setFillOpacity(0.2f);
            // 设置笔触字体不透明度为0.4f
            gs.setStrokeOpacity(0.4f);
            // 开始水印处理
            waterMar.beginText();
            // 设置透明度
            waterMar.setGState(gs);
            // 设置水印字体参数及大小
            waterMar.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 60);
            // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
            waterMar.showTextAligned(Element.ALIGN_CENTER, "公司内部文件，请注意保密！", 500, 430, 45);
            // 设置水印颜色
            waterMar.setColorFill(BaseColor.GRAY);
            // 创建水印图片
            Image image = Image.getInstance("C:/Users/admin/Desktop/icon.jpg");
            // 水印图片位置
            image.setAbsolutePosition(380, 720);
            // 边框固定
            image.scaleToFit(200, 200);
            // 设置旋转弧度
            //image.setRotation(30);// 旋转 弧度
            // 设置旋转角度
            //image.setRotationDegrees(45);// 旋转 角度
            // 设置等比缩放
            image.scalePercent(90);
            // 自定义大小
            image.scaleAbsolute(200, 100);
            // 附件加上水印图片
            waterMar.addImage(image);
            // 完成水印添加
            waterMar.endText();
            // stroke
            waterMar.stroke();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("PDF加图片水印>> ok 所用时间:[{}]" + (endTime - startTime) + "s");
        stamper.close();
        reader.close();
    }
}
